package com.easyjava;

import com.easyjava.bean.TableInfo;
import com.easyjava.builder.*;
import com.easyjava.init.InitCascade;
import com.easyjava.utils.EndUtils;
import com.easyjava.vuebuilder.BuilderLayout;
import com.easyjava.vuebuilder.BuilderVue;
import com.easyjava.vuebuilder.BuilderVueApis;
import com.easyjava.vuebuilder.BuilderVueBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

/**
 * @Author: 小闹心
 * @Description: 启动类
 * @DateTime: 2024/11/16 9:42
 **/
public class RunApplication {
    private static final Logger log = LoggerFactory.getLogger(RunApplication.class);
    public static void main(String[] args) {
        // 拿到表信息
        List<TableInfo> tableInfoList = BuildTable.getTables();
        log.info("成功拿到表单信息 : {}", tableInfoList);
        backend(tableInfoList);
//        frontEnd(tableInfoList);
        // 生成前端展示代码，用于展示 - 要进行路由配置不可直接复制文件
//        BuilderLayout.execute(tableInfoList);
        EndUtils.execute();
    }
    private static void backend(List<TableInfo> tableInfoList){
        // 生成基础类
        BuildBase.execute();
        log.info("生成基础类成功");
        InitCascade.execute(tableInfoList);

        // 创建文件
        for(TableInfo tableInfo : tableInfoList){
            BuildEnum.execute(tableInfo);
            log.info("生成 {} 枚举类成功", tableInfo.getTableName());
            BuildPo.execute(tableInfo);
            log.info("生成 {} 实体类成功", tableInfo.getTableName());
            BuildQuery.execute(tableInfo);
            log.info("生成 {} 查询类成功", tableInfo.getTableName());
            BuildMapper.execute(tableInfo);
            log.info("生成 {} Mapper接口成功", tableInfo.getTableName());
            BuildMapperXml.execute(tableInfo);
            log.info("生成 {} MapperXml成功", tableInfo.getTableName());
            BuildService.execute(tableInfo);
            log.info("生成 {} Service接口成功", tableInfo.getTableName());
            BuildServiceImpl.execute(tableInfo);
            log.info("生成 {} ServiceImpl类成功", tableInfo.getTableName());
            BuildController.execute(tableInfo);
            log.info("生成 {} Controller类成功", tableInfo.getTableName());
        }
        log.info("后端全部生成成功");

    }

    private static void frontEnd(List<TableInfo> tableInfoList){
        // 生成前端代码
        BuilderVueBase.execute();
        log.info("生成前端基础类成功");
        // 创建文件
        for(TableInfo tableInfo : tableInfoList){
            BuilderVueApis.execute(tableInfo);

            BuilderVue.execute(tableInfo);
        }
        log.info("前端全部生成成功");
    }
}
